package com.wj.algorithm.lintcode;

/*
 * 给出两个32位的整数N和M，以及两个二进制位的位置i和j。写一个方法来使得N中的第i到j位等于M（M会是N中从第i为开始到第j位的子串）

您在真实的面试中是否遇到过这个题？ Yes
样例
给出N = (10000000000)2，M = (10101)2， i = 2, j = 6

返回 N = (10001010100)2
 */
public class P179 {

    public int updateBits(int n, int m, int i, int j) {
        int midZero = ((2 << j) - 1) - ((1 << i) - 1);
        
        n = n & (-1 ^ midZero);
        
        long rs = (long)n | (m << i);

        rs = rs & (((long)1 << 32) - 1);
        
        return (int)rs;
    }
    public static void main(String[] args) {
        System.out.println(new P179().updateBits(-2147483648,-1,0,30));
    }
}
